home *** CD-ROM | disk | FTP | other *** search
/ Executor 2.0 / executorv2.0.iso / pc / dos / extra / source / browser / browser.hqx / Browser / iconcontrol ƒ / icontest ƒ / main.c < prev   
Encoding:
C/C++ Source or Header  |  1995-05-14  |  4.2 KB  |  199 lines

  1. void drawicxx (Ptr pat, BitMap * mbm, Rect * dest, CWindowPtr w, short size, short depth);
  2. void dodrawcontrol (CWindowPtr wp, short x, short y, short rdepth, short resid,
  3.             short rsize);
  4.  
  5. extern GDHandle theGDevice:0xCC8;
  6.  
  7. #define FIRSTICON        100
  8. #define LASTICON        108
  9.  
  10. void InitToolbox (void);
  11.  
  12. void
  13. InitToolbox ()
  14. {
  15.   InitGraf ((Ptr) & qd.thePort);
  16.   InitFonts ();
  17.   InitWindows ();
  18.   InitMenus ();
  19.   FlushEvents (everyEvent, 0);
  20.   TEInit ();
  21.   InitDialogs (0L);
  22.   InitCursor ();
  23. }
  24. void
  25. drawicxx (Ptr pat, BitMap * mbm, Rect * dest, CWindowPtr w, short size, short depth)
  26. {
  27.   PixMap spm;
  28.   Rect sr;
  29.   unsigned char state;
  30.   short i;
  31.  
  32.   SetRect (&sr, 0, 0, size, size);
  33.   spm.baseAddr = pat;
  34.   spm.rowBytes = (size * depth / 8);
  35.   if (depth != 1)
  36.     spm.rowBytes |= 0x8000;
  37.   SetRect (&spm.bounds, 0, 0, size, size);
  38.   spm.pmVersion = 0;
  39.   spm.packType = 0;
  40.   spm.packSize = 0;
  41.   spm.hRes = spm.vRes = (Fixed) 72;
  42.   spm.pixelType = 0;
  43.   spm.pixelSize = depth;
  44.   spm.cmpCount = 1;
  45.   spm.cmpSize = depth;
  46.   spm.planeBytes = 0;
  47. /* TODO: figure out the correct way to get the CTabHandle */
  48. #if 1
  49.   spm.pmTable = (*w->portPixMap)->pmTable;
  50. #else
  51.   i = 127;
  52.   spm.pmTable = GetCTable (i);
  53. #endif
  54.  
  55.   SetRect (&sr, 0, 0, size, size);
  56.   state = HGetState ((Handle) w->portPixMap);
  57.   HLock ((Handle) w->portPixMap);
  58.   CopyMask ((BitMap *) & spm, mbm, (BitMap *) * w->portPixMap, &sr, &sr, dest);
  59.   HSetState ((Handle) w->portPixMap, state);
  60. }
  61.  
  62. void
  63. dodrawcontrol (CWindowPtr wp, short x, short y, short rdepth, short resid,
  64.            short rsize)
  65. {
  66.   Rect dr;
  67.   Handle mask, data;
  68.   short depth, size;
  69.   BitMap mbm;
  70.   unsigned char mstate, dstate;
  71.   GrafPtr saveport;
  72.   RGBColor blendcolor;
  73.  
  74.   GetPort (&saveport);
  75.   SetPort ((GrafPtr) wp);
  76.   SetRect (&dr, x, y, x + rsize, y + rsize);
  77.   InsetRect (&dr, -1, -1);
  78.   EraseRect (&dr);
  79.   InsetRect (&dr, 1, 1);
  80.   if (rdepth > (*(*theGDevice)->gdPMap)->pixelSize)
  81.     rdepth = (*(*theGDevice)->gdPMap)->pixelSize;
  82.  
  83.   if (rsize == 16)
  84.     {
  85.       data = GetResource ('ics8', resid);
  86.       if (data == 0 || rdepth < 8)
  87.     {
  88.       data = GetResource ('ics4', resid);
  89.       if (data == 0 || rdepth < 4)
  90.         {
  91.           data = GetResource ('ics#', resid);
  92.           depth = 1;
  93.           size = 16;
  94.         }
  95.       else
  96.         {
  97.           depth = 4;
  98.           size = 16;
  99.         }
  100.     }
  101.       else
  102.     {
  103.       depth = 8;
  104.       size = 16;
  105.     }
  106.       mask = GetResource ('ics#', resid);
  107. /*      assert ((mask == 0) ^ (data != 0)); */
  108.     }
  109.   if (rsize == 32 || (rsize == 16 && data == 0))
  110.     {
  111.       data = GetResource ('icl8', resid);
  112.       if (data == 0 || rdepth < 8)
  113.     {
  114.       data = GetResource ('icl4', resid);
  115.       if (data == 0 || rdepth < 4)
  116.         {
  117.           data = GetResource ('ICN#', resid);
  118. /*              assert(data != 0); */
  119.           depth = 1;
  120.           size = 32;
  121.         }
  122.       else
  123.         {
  124.           depth = 4;
  125.           size = 32;
  126.         }
  127.     }
  128.       else
  129.     {
  130.       depth = 8;
  131.       size = 32;
  132.     }
  133.       mask = GetResource ('ICN#', resid);
  134. /*      assert (mask != 0); */
  135.     }
  136.  
  137.   dstate = HGetState (data);
  138.   HLock (data);
  139.   mstate = HGetState (mask);
  140.   HLock (mask);
  141.   mbm.baseAddr = *mask + size * size / 8;
  142.   mbm.rowBytes = size / 8;
  143.   SetRect (&mbm.bounds, 0, 0, size, size);
  144.   drawicxx (*data, &mbm, &dr, wp, size, depth);
  145. #if 0
  146.   OpColor (halfwhite);
  147.   hiliteMode &= ~(1 << hiliteBit);
  148.   InvertRect (&dr);
  149. #else
  150. #if 0
  151.   PenMode (blend);
  152.   blendcolor.red = 32768;
  153.   blendcolor.green = 32768;
  154.   blendcolor.blue = 32768;
  155.   OpColor (&blendcolor);
  156.   PaintRect (&dr);
  157.   PenNormal ();
  158. #endif
  159. #endif
  160.   HSetState (data, dstate);
  161.   HSetState (mask, mstate);
  162.   SetPort (saveport);
  163. }
  164.  
  165. main ()
  166. {
  167.   CWindowPtr wp;
  168.   Rect r;
  169.   short x, y, i;
  170.   EventRecord ev;
  171.  
  172.   InitToolbox ();
  173.  
  174.   SetRect (&r, 10, 40, 600, 450);
  175.   wp = (CWindowPtr) NewCWindow (wp, &r, "\ptest", true, documentProc,
  176.                 (WindowPtr) 0, true, 0);
  177.   SelectWindow ((WindowPtr) wp);
  178.   y = 20;
  179.   for (i = FIRSTICON; i <= LASTICON; i++)
  180.     {
  181.       x = 10;
  182.       dodrawcontrol (wp, x, y, 1, i, 32);
  183.       x += 50;
  184.       dodrawcontrol (wp, x, y, 4, i, 32);
  185.       x += 50;
  186.       dodrawcontrol (wp, x, y, 8, i, 32);
  187.       x += 50;
  188.       dodrawcontrol (wp, x, y, 1, i, 16);
  189.       x += 25;
  190.       dodrawcontrol (wp, x, y, 4, i, 16);
  191.       x += 25;
  192.       dodrawcontrol (wp, x, y, 8, i, 16);
  193.       y += 40;
  194.     }
  195.   while (!WaitNextEvent (mDownMask, &ev, 0, (RgnHandle) 0))
  196.     ;
  197.   return 0;
  198. }
  199.